namespace OasisCiq.Xal
{
    using System.Collections.Generic;
    using System.Collections.Specialized;
    using CommonTypes;
    using External;
    using XS;

    /// <summary>
    /// Details of Locality which is a named densely populated area (a place) such as
    /// town, village, suburb, etc. A locality composes of many individual addresses.
    /// Many localities exist in an administrative area or a sub adminisrative area.
    /// A locality can also have sub localities. For example, a municipality locality
    /// can have many villages associated with it which are sub localities.
    /// Example: Tamil Nadu State, Erode District, Bhavani Taluk, Paruvachi Village
    /// is a valid address in India. Tamil Nadu is the Administrative Area,
    /// Erode is the sub admin area, Bhavani is the locality, and Paruvachi is the sub locality
    /// </summary>
    public class Locality : IDataQualityGroup, ILanguageCodeGroup, IExtendedAttributes
    {
        /// <summary>
        /// at least one element required
        /// </summary>
        public ICollection<LocalityNameElement> NameElements { get; set; }

        public SubLocality SubLocality { get; set; }

        /// <summary>
        /// Type of locality. e.g. suburb, area, zone, village, etc
        /// </summary>
        public LocalityTypeList Type { get; set; }

        public DataQualityTypeList DataQualityType { get; set; }

        public XSDateTime ValidFrom { get; set; }

        public XSDateTime ValidTo { get; set; }

        public XSLanguage LanguageCode { get; set; }

        public NameValueCollection ExtendedAttributes { get; set; }
    }
}